# include <vector>
# include <string>
# include <map>
# include <queue>
struct XmlNode{
    XmlNode(const std::string & strName): name(strName){}
    typedef std::map<std::string,std::string> Properties;
    typedef std::vector<XmlNode> Children;
    std::string name;
    std::string contents;
    Properties properties;
    Children children;
}
void levelorderTraversal(XmlNode * rootNode){
    queue<XmlNode*> Q;
    Q.push(rootNode);
    while(!Q.empty()){
        int size = Q.size();
        while(size){
            XmlNode* front = Q.front();
            Q.pop();
            for(auto it = front->children.begin();it!=front->children.end();it++){
                Q.push(*it);
            }
            size--;
        }
    }
}